
#ifndef _IPHLPAPI_H_
#define _IPHLPAPI_H_

	#define CSIDL_LOCAL_APPDATA             0x001c      // non roaming, user\Local Settings\Application Data
	#define CSIDL_INTERNET_CACHE            0x0020
	#define CSIDL_COOKIES                   0x0021
	#define CSIDL_HISTORY                   0x0022
	#define CSIDL_COMMON_APPDATA            0x0023      // All Users\Application Data
	#define CSIDL_WINDOWS                   0x0024      // GetWindowsDirectory()
	#define CSIDL_SYSTEM                    0x0025      // GetSystemDirectory()
	#define CSIDL_PROGRAM_FILES             0x0026      // C:\Program Files
	#define CSIDL_MYPICTURES                0x0027      // My Pictures, new for Win2K
	#define CSIDL_PROGRAM_FILES_COMMON      0x002b      // C:\Program Files\Common 
	#define CSIDL_COMMON_DOCUMENTS          0x002e      // All Users\Documents
	#define CSIDL_RESOURCES                 0x0038      // %windir%\Resources\, For theme and other windows resources.
	#define CSIDL_RESOURCES_LOCALIZED       0x0039      // %windir%\Resources\<LangID>, for theme and other windows specific resources.


	#define MAX_ADAPTER_DESCRIPTION_LENGTH  128 // arb.
	#define MAX_ADAPTER_NAME_LENGTH         256 // arb.
	#define MAX_ADAPTER_ADDRESS_LENGTH      8   // arb.
	#define DEFAULT_MINIMUM_ENTITIES        32  // arb.
	#define MAX_HOSTNAME_LEN                128 // arb.
	#define MAX_DOMAIN_NAME_LEN             128 // arb.
	#define MAX_SCOPE_ID_LEN                256 // arb.
	#define MAX_DHCPV6_DUID_LENGTH          130 // RFC 3315.
	
	
	//
	// types
	//

	// Node Type

	#define BROADCAST_NODETYPE              1
	#define PEER_TO_PEER_NODETYPE           2
	#define MIXED_NODETYPE                  4
	#define HYBRID_NODETYPE            
	//
	// IP_ADDRESS_STRING - store an IP address as a dotted decimal string
	//

	typedef struct {
		char String[4 * 4];
	} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;

	//
	// IP_ADDR_STRING - store an IP address with its corresponding subnet mask,
	// both as dotted decimal strings
	//

	typedef struct _IP_ADDR_STRING {
		struct _IP_ADDR_STRING* Next;
		IP_ADDRESS_STRING IpAddress;
		IP_MASK_STRING IpMask;
		DWORD Context;
	} IP_ADDR_STRING, *PIP_ADDR_STRING;

	//
	// ADAPTER_INFO - per-adapter information. All IP addresses are stored as
	// strings
	//

	typedef struct _IP_ADAPTER_INFO {
		struct _IP_ADAPTER_INFO* Next;
		DWORD ComboIndex;
		char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
		char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
		UINT AddressLength;
		BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
		DWORD Index;
		UINT Type;
		UINT DhcpEnabled;
		PIP_ADDR_STRING CurrentIpAddress;
		IP_ADDR_STRING IpAddressList;
		IP_ADDR_STRING GatewayList;
		IP_ADDR_STRING DhcpServer;
		BOOL HaveWins;
		IP_ADDR_STRING PrimaryWinsServer;
		IP_ADDR_STRING SecondaryWinsServer;
		time_t LeaseObtained;
		time_t LeaseExpires;
	} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

	typedef struct {
		char HostName[MAX_HOSTNAME_LEN + 4] ;
		char DomainName[MAX_DOMAIN_NAME_LEN + 4];
		PIP_ADDR_STRING CurrentDnsServer;
		IP_ADDR_STRING DnsServerList;
		UINT NodeType;
		char ScopeId[MAX_SCOPE_ID_LEN + 4];
		UINT EnableRouting;
		UINT EnableProxy;
		UINT EnableDns;
	} FIXED_INFO_W2KSP1, *PFIXED_INFO_W2KSP1;
	#if (NTDDI_VERSION >= NTDDI_WIN2KSP1)
	typedef  FIXED_INFO_W2KSP1 FIXED_INFO;
	typedef  FIXED_INFO_W2KSP1 *PFIXED_INFO;
	#endif

#endif